#include<vector>
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<string>
#define E 2.7183


class Linear{
    public:
        int input_num;
        int output_num;
        float** weight;
        float** bias;
        Linear(int,int);
        ~Linear();
        float* forward(float*,int);
        void update_para(float*,float*,float,int,int);
};

class Func{
    public:
        static float* relu(float*,int);
        static int argmax(float*,int);
        static float* softmax(float*,int);
        // static float* flatten2d();
        static float MSELoss(float*,float*,int,int);
};

class gradient{
    public:
        static float* gra_loss(float*,float*,int);
        static float* gra_relu(float*,int,float*,int);
        static float* gra_weight(int,float**,float*,int);
        static float* gra_softmax(float*,int);
};

class tag{
    public:
        static void taghere(std::string,int);
        static void taghere(std::string,float);
        static void taghere(std::string,float*,int);
        static void taghere(std::string,int*,int);
        static void taghere(std::string,float**,int,int);
        static void taghere(std::string,int**,int,int);
};